🖥 Краткое руководство по RegEx в Python
📦 Импорт модуля:
import re
🔍 Основные функции модуля re
re.search(pattern, string) # Находит первое совпадение в любой части строки
re.match(pattern, string) # Проверяет совпадение только в начале строки
re.fullmatch(pattern, string) # Проверяет, соответствует ли вся строка шаблону полностью
re.findall(pattern, string) # Возвращает список всех совпадений
re.finditer(pattern, string) # То же самое, но возвращает итератор с объектами Match
re.sub(pattern, repl, string) # Заменяет найденные по шаблону участки
re.split(pattern, string) # Делит строку по шаблону
# 🧠 Основы синтаксиса шаблонов
| Шаблон | Значение |
|---------|-----------------------------------|
| . | Любой символ, кроме символа новой строки |
| ^ | Начало строки |
| $ | Конец строки |
| * | 0 или более повторений |
| + | 1 или более повторений |
| ? | 0 или 1 повторение |
| {n} | Ровно n повторений |
| {n,} | n или больше повторений |
| {n,m} | От n до m повторений |
| [] | Класс символов |
| [^] | Отрицание класса символов |
| | | Логическое ИЛИ (`a|b`) |
| () | Группа захвата |
| \ | Экранирование специальных символов|
💡 Примеры
re.search(r'\d+', 'ID=12345') # Найдёт '12345' (одна или более цифр)
re.match(r'^\w+$', 'hello_world') # Проверяет, что вся строка состоит из букв, цифр или _
re.findall(r'[A-Z][a-z]+', 'Mr. Smith and Dr. Brown') # ['Smith', 'Brown']
re.sub(r'\s+', '-', 'a b c') # Результат: 'a-b-c'
re.split(r'[;,\s]\s*', 'one, two;three four') # ['one', 'two', 'three', 'four']
🎯 Работа с группами захвата
text = 'Name: John, Age: 30'
match = re.search(r'Name: (\w+), Age: (\d+)', text)
if match:
print(match.group(1)) # John
print(match.group(2)) # 30
Группы можно называть:
pattern = r'(?P<name>\w+): (?P<value>\d+)'
match = re.search(pattern, 'score: 42')
match.group('name') # 'score'
match.group('value') # '42'
🧱 Сложные шаблоны
pattern = r'\b(?:https?://)?(www\.)?\w+\.\w+\b'
text = 'Visit https://example.com or www.test.org'
re.findall(pattern, text) # [['www.'], ['www.']]
⚠️ Полезные рекомендации
• Используйте префикс r'' перед шаблонами, чтобы не нужно было экранировать обратный слэш \
• re.compile(pattern) помогает повысить скорость при многократном использовании шаблона
• Лучше использовать re.search вместо re.match, так как он ищет совпадение в любом месте строки
✅ Быстрая проверка шаблонов
📍 Онлайн-сервисы для тестирования:
- https://regex101.com/
- https://pythex.org/
Если нужна отдельная шпаргалка по re.sub с использованием лямбда-функций, замен и функций внутри, ставь лайк 👍
@Python_Community_ru
📦 Импорт модуля:
import re
🔍 Основные функции модуля re
re.search(pattern, string) # Находит первое совпадение в любой части строки
re.match(pattern, string) # Проверяет совпадение только в начале строки
re.fullmatch(pattern, string) # Проверяет, соответствует ли вся строка шаблону полностью
re.findall(pattern, string) # Возвращает список всех совпадений
re.finditer(pattern, string) # То же самое, но возвращает итератор с объектами Match
re.sub(pattern, repl, string) # Заменяет найденные по шаблону участки
re.split(pattern, string) # Делит строку по шаблону
# 🧠 Основы синтаксиса шаблонов
| Шаблон | Значение |
|---------|-----------------------------------|
| . | Любой символ, кроме символа новой строки |
| ^ | Начало строки |
| $ | Конец строки |
| * | 0 или более повторений |
| + | 1 или более повторений |
| ? | 0 или 1 повторение |
| {n} | Ровно n повторений |
| {n,} | n или больше повторений |
| {n,m} | От n до m повторений |
| [] | Класс символов |
| [^] | Отрицание класса символов |
| | | Логическое ИЛИ (`a|b`) |
| () | Группа захвата |
| \ | Экранирование специальных символов|
💡 Примеры
re.search(r'\d+', 'ID=12345') # Найдёт '12345' (одна или более цифр)
re.match(r'^\w+$', 'hello_world') # Проверяет, что вся строка состоит из букв, цифр или _
re.findall(r'[A-Z][a-z]+', 'Mr. Smith and Dr. Brown') # ['Smith', 'Brown']
re.sub(r'\s+', '-', 'a b c') # Результат: 'a-b-c'
re.split(r'[;,\s]\s*', 'one, two;three four') # ['one', 'two', 'three', 'four']
🎯 Работа с группами захвата
text = 'Name: John, Age: 30'
match = re.search(r'Name: (\w+), Age: (\d+)', text)
if match:
print(match.group(1)) # John
print(match.group(2)) # 30
Группы можно называть:
pattern = r'(?P<name>\w+): (?P<value>\d+)'
match = re.search(pattern, 'score: 42')
match.group('name') # 'score'
match.group('value') # '42'
🧱 Сложные шаблоны
pattern = r'\b(?:https?://)?(www\.)?\w+\.\w+\b'
text = 'Visit https://example.com or www.test.org'
re.findall(pattern, text) # [['www.'], ['www.']]
⚠️ Полезные рекомендации
• Используйте префикс r'' перед шаблонами, чтобы не нужно было экранировать обратный слэш \
• re.compile(pattern) помогает повысить скорость при многократном использовании шаблона
• Лучше использовать re.search вместо re.match, так как он ищет совпадение в любом месте строки
✅ Быстрая проверка шаблонов
📍 Онлайн-сервисы для тестирования:
- https://regex101.com/
- https://pythex.org/
Если нужна отдельная шпаргалка по re.sub с использованием лямбда-функций, замен и функций внутри, ставь лайк 👍
@Python_Community_ru
regex101
regex101: build, test, and debug regex
Regular expression tester with syntax highlighting, explanation, cheat sheet for PHP/PCRE, Python, GO, JavaScript, Java, C#/.NET, Rust.
🖥 systemd-pilot (https://github.com/mfat/systemd-pilot) — это программа для рабочего стола, предназначенная для управления сервисами systemd в системах GNU/Linux!
🌟 По сути, это графический интерфейс для команд systemctl. С его помощью можно просматривать и контролировать системные сервисы, быстро создавать новые сервисы, а также запускать, останавливать и перезапускать их. Приложение занимает мало места и написано всего одним Python-скриптом. Кроме того, есть возможность искать сервисы по их имени.
🔐 Лицензия: GPL-3.0
🖥 Github (https://github.com/mfat/systemd-pilot)
@Python_Community_ru
🌟 По сути, это графический интерфейс для команд systemctl. С его помощью можно просматривать и контролировать системные сервисы, быстро создавать новые сервисы, а также запускать, останавливать и перезапускать их. Приложение занимает мало места и написано всего одним Python-скриптом. Кроме того, есть возможность искать сервисы по их имени.
🔐 Лицензия: GPL-3.0
🖥 Github (https://github.com/mfat/systemd-pilot)
@Python_Community_ru
🧠 Как подготовиться к техническому собеседованию с помощью
Если ты собираешься на собеседование в IT и не знаешь, с чего начать, обрати внимание на бесплатный курс от freeCodeCamp (https://www.freecodecamp.org/news/prepare-for-technical-interviews-using-neetcode-150/), который основан на известном списке задач NeetCode 150.
⚙️ Что такое NeetCode 150?
• 🟤 Это подборка из 150 задач с LeetCode, охватывающая все необходимые темы:
• массивы
• строки
• хеш-таблицы
• деревья и графы
• динамическое программирование
• стек и очередь
• backtracking и двоичный поиск
🎓 Что включает курс freeCodeCamp:
• 38 часов подробных видеоуроков
• Каждая задача рассматривается шаг за шагом — с объяснением подходов и кода
• Языки программирования: Python и JavaScript
• Курс полностью бесплатный
📈 Почему это работает:
• Все задачи взяты из реальных технических собеседований
• Курс построен так, чтобы идти от простого к более сложному
• Можно учиться в удобном для себя темпе
- Начать можно здесь (https://www.freecodecamp.org/news/prepare-for-technical-interviews-using-neetcode-150)
- Видео с разбором вопросов (https://www.youtube.com/watch?v=T0u5nwSA0w0)
- Решения задач (https://neetcode.io/practice)
Не упусти возможность упорядочить свои знания и уверенно пройти собеседование!
@Python_Community_ru
Если ты собираешься на собеседование в IT и не знаешь, с чего начать, обрати внимание на бесплатный курс от freeCodeCamp (https://www.freecodecamp.org/news/prepare-for-technical-interviews-using-neetcode-150/), который основан на известном списке задач NeetCode 150.
⚙️ Что такое NeetCode 150?
• 🟤 Это подборка из 150 задач с LeetCode, охватывающая все необходимые темы:
• массивы
• строки
• хеш-таблицы
• деревья и графы
• динамическое программирование
• стек и очередь
• backtracking и двоичный поиск
🎓 Что включает курс freeCodeCamp:
• 38 часов подробных видеоуроков
• Каждая задача рассматривается шаг за шагом — с объяснением подходов и кода
• Языки программирования: Python и JavaScript
• Курс полностью бесплатный
📈 Почему это работает:
• Все задачи взяты из реальных технических собеседований
• Курс построен так, чтобы идти от простого к более сложному
• Можно учиться в удобном для себя темпе
- Начать можно здесь (https://www.freecodecamp.org/news/prepare-for-technical-interviews-using-neetcode-150)
- Видео с разбором вопросов (https://www.youtube.com/watch?v=T0u5nwSA0w0)
- Решения задач (https://neetcode.io/practice)
Не упусти возможность упорядочить свои знания и уверенно пройти собеседование!
@Python_Community_ru
🎭 Pykka — акторная модель для Python без лишних сложности. Этот проект позволяет организовывать конкурентные вычисления без традиционных проблем с состоянием и блокировками.
Вдохновлённый знаменитым Akka для JVM, Pykka предлагает минималистичный подход — никаких супервизоров или распределённых акторов, только чистые принципы обмена сообщениями между изолированными процессами.
Инструмент имеет продуманную архитектуру: разработчику достаточно определить поведение акторов, а Pykka возьмет на себя всю работу с очередями и потоками.
🤖 GitHub (https://github.com/jodal/pykka?tab=readme-ov-file)
@Python_Community_ru
Вдохновлённый знаменитым Akka для JVM, Pykka предлагает минималистичный подход — никаких супервизоров или распределённых акторов, только чистые принципы обмена сообщениями между изолированными процессами.
Инструмент имеет продуманную архитектуру: разработчику достаточно определить поведение акторов, а Pykka возьмет на себя всю работу с очередями и потоками.
🤖 GitHub (https://github.com/jodal/pykka?tab=readme-ov-file)
@Python_Community_ru
🐍 Задача уровня Pro: декоратор с внутренним состоянием
📌 Задача:
Напиши декоратор call_limiter, который:
- ограничивает функцию f максимум до n вызовов
- после n вызова функция больше не вызывается, а возвращает строку "LIMIT REACHED"
Пример использования:
@call_limiter(3)
def greet(name):
return f"Hello, {name}!"
print(greet("Alice")) # Hello, Alice!
print(greet("Bob")) # Hello, Bob!
print(greet("Charlie"))# Hello, Charlie!
print(greet("Dave")) # LIMIT REACHED
🎯 Подвохи:
- Нужно создать декоратор-фабрику с аргументом n
- Внутри должна быть функция с nonlocal, чтобы отслеживать число вызовов
- Часто путаются и используют mutable default, что ломает независимость между декорируемыми функциями
✅ Решение:
```python
def call_limiter(n):
def decorator(func):
count = 0
def wrapper(*args, **kwargs):
nonlocal count
if count >= n:
return "LIMIT REACHED"
count += 1
return func(*args, **kwargs)
return wrapper
return decorator
```
🧪 **Проверка:**
```python
@call_limiter(2)
def ping():
return "pong"
print(ping()) # pong
print(ping()) # pong
print(ping()) # LIMIT REACHED
@call_limiter(1)
def echo(msg):
return msg
print(echo("hi")) # hi
print(echo("bye")) # LIMIT REACHED
```
🧠 **Что проверяет задача:**
• Понимание функций высшего порядка
• Работа с `nonlocal` и областью видимости
• Контроль состояния внутри декоратора
• Умение не "засорить" глобальные или общие области
@Python_Community_ru
📌 Задача:
Напиши декоратор call_limiter, который:
- ограничивает функцию f максимум до n вызовов
- после n вызова функция больше не вызывается, а возвращает строку "LIMIT REACHED"
Пример использования:
@call_limiter(3)
def greet(name):
return f"Hello, {name}!"
print(greet("Alice")) # Hello, Alice!
print(greet("Bob")) # Hello, Bob!
print(greet("Charlie"))# Hello, Charlie!
print(greet("Dave")) # LIMIT REACHED
🎯 Подвохи:
- Нужно создать декоратор-фабрику с аргументом n
- Внутри должна быть функция с nonlocal, чтобы отслеживать число вызовов
- Часто путаются и используют mutable default, что ломает независимость между декорируемыми функциями
✅ Решение:
```python
def call_limiter(n):
def decorator(func):
count = 0
def wrapper(*args, **kwargs):
nonlocal count
if count >= n:
return "LIMIT REACHED"
count += 1
return func(*args, **kwargs)
return wrapper
return decorator
```
🧪 **Проверка:**
```python
@call_limiter(2)
def ping():
return "pong"
print(ping()) # pong
print(ping()) # pong
print(ping()) # LIMIT REACHED
@call_limiter(1)
def echo(msg):
return msg
print(echo("hi")) # hi
print(echo("bye")) # LIMIT REACHED
```
🧠 **Что проверяет задача:**
• Понимание функций высшего порядка
• Работа с `nonlocal` и областью видимости
• Контроль состояния внутри декоратора
• Умение не "засорить" глобальные или общие области
@Python_Community_ru
🤖 ACI.dev — Унифицированный доступ AI-агентов к 600+ инструментам
ACI (Agent Capability Interface) — это открытая платформа, которая позволяет AI-агентам подключаться к более чем 600 внешним инструментам и API, используя единую инфраструктуру доступа. Система включает поддержку многоарендной архитектуры (multi-tenant), гибкие разрешения и несколько режимов вызова — как через MCP-сервер, так и напрямую через SDK.
🎯 Цель проекта — предоставить ИИ-доступ к реальным действиям в цифровой среде: от отправки писем и управления календарём до взаимодействия с CRM, базами данных, DevOps-инструментами и даже пользовательскими функциями.
🧩 Основные возможности:
- 🔌 600+ готовых интеграций
Поддержка популярных платформ: Notion, Slack, Google Calendar, GitHub, Discord, Twilio, PostgreSQL и многих других.
- 🔐 Разграничение доступа и безопасность
Поддержка granular-permissions, токенов доступа, ролей, и подписанных вызовов с проверкой подлинности.
- 🧠 Интеграция с AI-агентами
Разработано для работы с open-source AI-платформами, включая AutoGen, CrewAI, LangGraph, OpenDevin, Devika и т.д.
- 🛠️ Два способа использования
1. MCP Server — единая точка входа, через которую агент может выполнять действия.
2. ACI SDK — локальное подключение и вызов возможностей напрямую из кода.
- 🌐 Webhooks и Plugin support
Поддержка обратных вызовов и подключения как внешнего плагина к другим системам (например, для LLM-агентов).
ACI — это своего рода "операционная система" для ИИ-агентов, позволяющая им действовать в реальном мире с контролем, безопасностью и масштабируемостью.
🔗 Полезные ссылки:
- GitHub (https://github.com/aipotheosis-labs/aci)
- Документация (https://docs.aci.dev/)
@Python_Community_ru
ACI (Agent Capability Interface) — это открытая платформа, которая позволяет AI-агентам подключаться к более чем 600 внешним инструментам и API, используя единую инфраструктуру доступа. Система включает поддержку многоарендной архитектуры (multi-tenant), гибкие разрешения и несколько режимов вызова — как через MCP-сервер, так и напрямую через SDK.
🎯 Цель проекта — предоставить ИИ-доступ к реальным действиям в цифровой среде: от отправки писем и управления календарём до взаимодействия с CRM, базами данных, DevOps-инструментами и даже пользовательскими функциями.
🧩 Основные возможности:
- 🔌 600+ готовых интеграций
Поддержка популярных платформ: Notion, Slack, Google Calendar, GitHub, Discord, Twilio, PostgreSQL и многих других.
- 🔐 Разграничение доступа и безопасность
Поддержка granular-permissions, токенов доступа, ролей, и подписанных вызовов с проверкой подлинности.
- 🧠 Интеграция с AI-агентами
Разработано для работы с open-source AI-платформами, включая AutoGen, CrewAI, LangGraph, OpenDevin, Devika и т.д.
- 🛠️ Два способа использования
1. MCP Server — единая точка входа, через которую агент может выполнять действия.
2. ACI SDK — локальное подключение и вызов возможностей напрямую из кода.
- 🌐 Webhooks и Plugin support
Поддержка обратных вызовов и подключения как внешнего плагина к другим системам (например, для LLM-агентов).
ACI — это своего рода "операционная система" для ИИ-агентов, позволяющая им действовать в реальном мире с контролем, безопасностью и масштабируемостью.
🔗 Полезные ссылки:
- GitHub (https://github.com/aipotheosis-labs/aci)
- Документация (https://docs.aci.dev/)
@Python_Community_ru
🪬 Boto3 — мост между Python и AWS. Эта официальная Python-библиотека предоставляет удобный интерфейс для взаимодействия с сервисами AWS — от простых операций с S3 до управления кластерами EC2.
После недавнего прекращения поддержки Python 3.8 проект сосредоточился на современных версиях языка. Особенность Boto3 в двухуровневой архитектуре: низкоуровневые клиенты для точного контроля и ресурсные объекты для упрощённого синтаксиса. Документация от AWS включает примеры для всех основных сервисов, что делает интеграцию почти безболезненной.
🤖 GitHub (https://github.com/boto/boto3)
@Python_Community_ru
После недавнего прекращения поддержки Python 3.8 проект сосредоточился на современных версиях языка. Особенность Boto3 в двухуровневой архитектуре: низкоуровневые клиенты для точного контроля и ресурсные объекты для упрощённого синтаксиса. Документация от AWS включает примеры для всех основных сервисов, что делает интеграцию почти безболезненной.
🤖 GitHub (https://github.com/boto/boto3)
@Python_Community_ru
🧠 Как клонировать голос с помощью Open Source (Coqui TTS)
Хочешь, чтобы ИИ говорил твоим голосом? Без подписок, платных API и ограничений? Вот подробная инструкция, как клонировать свой голос с нуля с помощью open-source инструментов:
🔧 Установка
sudo apt install ffmpeg
pip install TTS soundfile torchaudio gradio
git clone https://github.com/coqui-ai/TTS.git
cd TTS
pip install -e .
🎙️ 1. Подготовка записи голоса
Тебе нужен файл .wav:
- продолжительность: от 1 минуты
- формат: моно, 16 кГц, 16-bit
Пример конвертации:
ffmpeg -i input.mp3 -ac 1 -ar 16000 output.wav
🧬 2. Генерация эмбеддинга твоего голоса
from TTS.tts.configs.xtts_config import XttsConfig
from TTS.tts.models.xtts import Xtts
config = XttsConfig()
model = Xtts.init_from_config(config)
model.load_checkpoint("tts_models/multilingual/multi-dataset/xtts_v2")
voice_sample = "your_voice.wav"
speaker_embedding = model.get_speaker_embedding(voice_sample)
📤 3. Генерация речи с твоим голосом
text = "Привет! Я теперь могу говорить твоим голосом."
wav = model.tts(text, speaker_embedding=speaker_embedding)
model.save_wav(wav, "output.wav")
💻 4. (Опционально) Интерфейс с Gradio
import gradio as gr
def speak(text):
wav = model.tts(text, speaker_embedding=speaker_embedding)
path = "generated.wav"
model.save_wav(wav, path)
return path
gr.Interface(fn=speak, inputs=gr.Textbox(), outputs=gr.Audio()).launch()
✅ Быстрый способ (через CLI)
tts --model_name "tts_models/multilingual/multi-dataset/xtts_v2" \
--text "Привет, мир!" \
--speaker_wav path/to/your.wav \
--out_path output.wav
⚠️ Важно
- 💻 Работает на CPU, но лучше с GPU.
- 🌐 Поддерживает русский язык.
@Python_Community_ru
Хочешь, чтобы ИИ говорил твоим голосом? Без подписок, платных API и ограничений? Вот подробная инструкция, как клонировать свой голос с нуля с помощью open-source инструментов:
🔧 Установка
sudo apt install ffmpeg
pip install TTS soundfile torchaudio gradio
git clone https://github.com/coqui-ai/TTS.git
cd TTS
pip install -e .
🎙️ 1. Подготовка записи голоса
Тебе нужен файл .wav:
- продолжительность: от 1 минуты
- формат: моно, 16 кГц, 16-bit
Пример конвертации:
ffmpeg -i input.mp3 -ac 1 -ar 16000 output.wav
🧬 2. Генерация эмбеддинга твоего голоса
from TTS.tts.configs.xtts_config import XttsConfig
from TTS.tts.models.xtts import Xtts
config = XttsConfig()
model = Xtts.init_from_config(config)
model.load_checkpoint("tts_models/multilingual/multi-dataset/xtts_v2")
voice_sample = "your_voice.wav"
speaker_embedding = model.get_speaker_embedding(voice_sample)
📤 3. Генерация речи с твоим голосом
text = "Привет! Я теперь могу говорить твоим голосом."
wav = model.tts(text, speaker_embedding=speaker_embedding)
model.save_wav(wav, "output.wav")
💻 4. (Опционально) Интерфейс с Gradio
import gradio as gr
def speak(text):
wav = model.tts(text, speaker_embedding=speaker_embedding)
path = "generated.wav"
model.save_wav(wav, path)
return path
gr.Interface(fn=speak, inputs=gr.Textbox(), outputs=gr.Audio()).launch()
✅ Быстрый способ (через CLI)
tts --model_name "tts_models/multilingual/multi-dataset/xtts_v2" \
--text "Привет, мир!" \
--speaker_wav path/to/your.wav \
--out_path output.wav
⚠️ Важно
- 💻 Работает на CPU, но лучше с GPU.
- 🌐 Поддерживает русский язык.
@Python_Community_ru
GitHub
GitHub - coqui-ai/TTS: 🐸💬 - a deep learning toolkit for Text-to-Speech, battle-tested in research and production
🐸💬 - a deep learning toolkit for Text-to-Speech, battle-tested in research and production - coqui-ai/TTS
Как получить карьерный буст и MacBook за подписку
В интернете полно курсов по самопиару и карьерному развитию в IT, но все они не сравнятся с реальными кейсами от действующих практиков.
Не нужно покупать дорогие консультации, чтобы перенять чужой опыт — достаточно подписаться на папку, где собралось более 30 лучших экспертов из IT и digital
Это люди, которые не только построили успешную карьеру с нуля, но и основали собственные компании.
Они собрались, чтобы прокачать тебя в маркетинге и дизайне, а ещё провести розыгрыш.
Подпишись на них и получи один из 3 призов:
🥇 Главный приз — MacBook Air (M2)
🥈 2 место: Яндекс Станция Лайт 2
🥉 3 место: Наушники HUAWEI Freebuds 5i
Участвуешь?
1. Подпишись на папку
2. Подтверди участие в боте
19 июня в прямом эфире опубликуем итоги розыгрыша!
В интернете полно курсов по самопиару и карьерному развитию в IT, но все они не сравнятся с реальными кейсами от действующих практиков.
Не нужно покупать дорогие консультации, чтобы перенять чужой опыт — достаточно подписаться на папку, где собралось более 30 лучших экспертов из IT и digital
Это люди, которые не только построили успешную карьеру с нуля, но и основали собственные компании.
Они собрались, чтобы прокачать тебя в маркетинге и дизайне, а ещё провести розыгрыш.
Подпишись на них и получи один из 3 призов:
Участвуешь?
1. Подпишись на папку
2. Подтверди участие в боте
19 июня в прямом эфире опубликуем итоги розыгрыша!
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Как масштабировать Python Task Queue — подробный гайд
Когда ваше Python-приложение начинает активно использовать фоновые задачи (email-уведомления, видеообработка, интеграции и т.д.), быстро возникает проблема: очередь задач растёт, задержка увеличивается, пользователи начинают ощущать тормоза.
В статье разбирается, как это решать грамотно, автоматически и эффективно.
🎯 Основные проблемы:
• Даже при низком CPU задачи могут выполняться с задержкой
• Очередь может казаться «тихой», но задачи копятся
• Масштабирование вручную по метрикам CPU/памяти — неэффективно
• Часто “один жирный воркер” не решает проблему — надо менять подход
⚙️ Как масштабировать: пошагово
1) 🔌 Выбор брокера сообщений
• Redis — прост в настройке, отлично работает с Celery и RQ
• RabbitMQ — надёжнее (повторы, подтверждения), подходит для критичных задач
2) ⚙️ Настройка воркеров
• *Вертикальное масштабирование*
— больше процессов внутри одного воркера (в Celery можно concurrency)
• *Горизонтальное масштабирование*
— запуск множества воркеров на разных инстансах, читающих из одной очереди
— универсальное и гибкое решение
3) 📈 Авто-скейлинг по latency, а не CPU
• Частая ошибка: масштабировать по CPU
• Правильный подход: масштабировать по времени ожидания задач в очереди
• Judoscale позволяет автоматизировать масштабирование именно по queue latency
• При росте задержки запускаются новые воркеры, при снижении — отключаются
4) 🧠 Fan-Out: разбивай большие задачи
Вместо:
Одна задача: обработать 10 000 пользователей
Правильно:
10 000 задач: по одной на каждого пользователя
Преимущества:
• Параллельность
• Надёжность (ошибки локализуются)
• Легче масштабировать обработку
📊 Результаты после внедрения:
• Время ожидания задач сократилось с 25 минут до 30 секунд
• Масштабирование стало динамичным
• Инфраструктура стала дешевле — меньше простаивающих воркеров
✅ Рекомендации:
• Используй Redis или RabbitMQ в зависимости от требований
• Отдавай предпочтение горизонтальному масштабированию
• Следи за latency, а не за CPU
• Используй Judoscale для авто-масштабирования
• Применяй fan-out для повышения надёжности и скорости
🖥 Ссылка на статью (https://judoscale.com/blog/scaling-python-task-queues)
@Python_Community_ru
Когда ваше Python-приложение начинает активно использовать фоновые задачи (email-уведомления, видеообработка, интеграции и т.д.), быстро возникает проблема: очередь задач растёт, задержка увеличивается, пользователи начинают ощущать тормоза.
В статье разбирается, как это решать грамотно, автоматически и эффективно.
🎯 Основные проблемы:
• Даже при низком CPU задачи могут выполняться с задержкой
• Очередь может казаться «тихой», но задачи копятся
• Масштабирование вручную по метрикам CPU/памяти — неэффективно
• Часто “один жирный воркер” не решает проблему — надо менять подход
⚙️ Как масштабировать: пошагово
1) 🔌 Выбор брокера сообщений
• Redis — прост в настройке, отлично работает с Celery и RQ
• RabbitMQ — надёжнее (повторы, подтверждения), подходит для критичных задач
2) ⚙️ Настройка воркеров
• *Вертикальное масштабирование*
— больше процессов внутри одного воркера (в Celery можно concurrency)
• *Горизонтальное масштабирование*
— запуск множества воркеров на разных инстансах, читающих из одной очереди
— универсальное и гибкое решение
3) 📈 Авто-скейлинг по latency, а не CPU
• Частая ошибка: масштабировать по CPU
• Правильный подход: масштабировать по времени ожидания задач в очереди
• Judoscale позволяет автоматизировать масштабирование именно по queue latency
• При росте задержки запускаются новые воркеры, при снижении — отключаются
4) 🧠 Fan-Out: разбивай большие задачи
Вместо:
Одна задача: обработать 10 000 пользователей
Правильно:
10 000 задач: по одной на каждого пользователя
Преимущества:
• Параллельность
• Надёжность (ошибки локализуются)
• Легче масштабировать обработку
📊 Результаты после внедрения:
• Время ожидания задач сократилось с 25 минут до 30 секунд
• Масштабирование стало динамичным
• Инфраструктура стала дешевле — меньше простаивающих воркеров
✅ Рекомендации:
• Используй Redis или RabbitMQ в зависимости от требований
• Отдавай предпочтение горизонтальному масштабированию
• Следи за latency, а не за CPU
• Используй Judoscale для авто-масштабирования
• Применяй fan-out для повышения надёжности и скорости
🖥 Ссылка на статью (https://judoscale.com/blog/scaling-python-task-queues)
@Python_Community_ru
🖥 PyRoki — модульный инструмент для оптимизации кинематики роботов
На GitHub и в preprint на arXiv появилась новая работа от исследователей из Berkeley — PyRoki (Python Robot Kinematics Toolkit). Это мощный, гибкий и кроссплатформенный инструмент на Python для задач оптимизации в робототехнике.
🔧 Что такое PyRoki?
PyRoki — это:
- 📦 Модульная архитектура
Разделение переменных оптимизации и функций стоимости (costs) позволяет комбинировать задачи IK, планирования траектории, ретаргетинга и многое другое — без повторения кода.
- ⚙️ Дифференцируемая кинематика
Поддержка URDF-моделей, автоматическое создание collision-примитивов (например, капсул), работа с NumPy и JAX.
- 🚀 Поддержка CPU, GPU и TPU
Высокая производительность и масштабируемость на любых вычислительных устройствах.
- 🧠 Оптимизация на многообразиях (Lie-группы)
Встроенный алгоритм Levenberg–Marquardt даёт устойчивую и быструю сходимость даже для сложных конфигураций.
📊 Результаты
- Быстрее cuRobo на 1.4–1.7x при решении задач IK в батче.
- Более точные результаты при меньших вычислительных затратах.
- Интерактивный визуализатор (на базе `viser`) для отладки и анализа.
📁 Примеры использования
PyRoki включает в себя готовые сценарии:
- инверсная кинематика (IK)
- бимануальные манипуляции
- мобильные платформы
- ретаргетинг движений гуманоидов
- учёт столкновений
- online-планирование и управление
🚀 Установка
git clone https://github.com/chungmin99/pyroki.git
cd pyroki
pip install -e .
Требуется Python 3.12+ (частичная поддержка Python 3.10–3.11).
PyRoki — это:
- 📐 Удобный фреймворк для исследований в области робототехники.
- 🛠️ Подходит как для академических, так и для прикладных задач.
- 🌐 Гибкий и масштабируемый — от одного робота до больших motion-баз.
Если интересен пример интеграции с ROS, Gazebo или симуляцией цифрового двойника — дай знать, покажу!
🔗 Репозиторий (https://github.com/chungmin99/pyroki)
#Python #Robotics #Kinematics #InverseKinematics #MotionPlanning #OpenSource
@Python_Community_ru
На GitHub и в preprint на arXiv появилась новая работа от исследователей из Berkeley — PyRoki (Python Robot Kinematics Toolkit). Это мощный, гибкий и кроссплатформенный инструмент на Python для задач оптимизации в робототехнике.
🔧 Что такое PyRoki?
PyRoki — это:
- 📦 Модульная архитектура
Разделение переменных оптимизации и функций стоимости (costs) позволяет комбинировать задачи IK, планирования траектории, ретаргетинга и многое другое — без повторения кода.
- ⚙️ Дифференцируемая кинематика
Поддержка URDF-моделей, автоматическое создание collision-примитивов (например, капсул), работа с NumPy и JAX.
- 🚀 Поддержка CPU, GPU и TPU
Высокая производительность и масштабируемость на любых вычислительных устройствах.
- 🧠 Оптимизация на многообразиях (Lie-группы)
Встроенный алгоритм Levenberg–Marquardt даёт устойчивую и быструю сходимость даже для сложных конфигураций.
📊 Результаты
- Быстрее cuRobo на 1.4–1.7x при решении задач IK в батче.
- Более точные результаты при меньших вычислительных затратах.
- Интерактивный визуализатор (на базе `viser`) для отладки и анализа.
📁 Примеры использования
PyRoki включает в себя готовые сценарии:
- инверсная кинематика (IK)
- бимануальные манипуляции
- мобильные платформы
- ретаргетинг движений гуманоидов
- учёт столкновений
- online-планирование и управление
🚀 Установка
git clone https://github.com/chungmin99/pyroki.git
cd pyroki
pip install -e .
Требуется Python 3.12+ (частичная поддержка Python 3.10–3.11).
PyRoki — это:
- 📐 Удобный фреймворк для исследований в области робототехники.
- 🛠️ Подходит как для академических, так и для прикладных задач.
- 🌐 Гибкий и масштабируемый — от одного робота до больших motion-баз.
Если интересен пример интеграции с ROS, Gazebo или симуляцией цифрового двойника — дай знать, покажу!
🔗 Репозиторий (https://github.com/chungmin99/pyroki)
#Python #Robotics #Kinematics #InverseKinematics #MotionPlanning #OpenSource
@Python_Community_ru
🐍 Задача с подвохом: mutable default arguments в Python
🔹 Уровень: Advanced
🔹 Темы: изменяемые аргументы по умолчанию, функции, ловушки с list и dict
📌 Условие
Что выведет следующий код?
def append_to_list(value, my_list=[]):
my_list.append(value)
return my_list
print(append_to_list(1))
print(append_to_list(2))
print(append_to_list(3))
❓ Вопросы
1. Почему результат выглядит неожиданно?
2. Как исправить это поведение?
3. Когда стоит использовать изменяемые аргументы по умолчанию — если вообще стоит?
🔍 Разбор
✅ Ожидаемый вывод:
[1]
[1, 2]
[1, 2, 3]
🔧 Почему так происходит
- Аргументы по умолчанию вычисляются один раз — во время определения функции, а не при каждом вызове.
- Значение my_list=[] создаётся один раз и затем используется повторно при всех вызовах.
- Все вызовы append_to_list изменяют один и тот же список.
⚠️ Подвох
Это один из самых коварных багов в Python, особенно среди начинающих — кажется, что my_list должен быть новым на каждый вызов, но это не так.
🧠 Вывод
- Никогда не используй изменяемые типы (list, dict, set) как значения по умолчанию.
- Вместо этого используй None и создавай новый объект вручную:
def append_to_list(value, my_list=None):
if my_list is None:
my_list = []
my_list.append(value)
return my_list
✅ Тогда вывод будет:
[1]
[2]
[3]
📌 Это правило относится ко всем изменяемым типам: [], {}, set() и кастомные классы.
@Python_Community_ru
🔹 Уровень: Advanced
🔹 Темы: изменяемые аргументы по умолчанию, функции, ловушки с list и dict
📌 Условие
Что выведет следующий код?
def append_to_list(value, my_list=[]):
my_list.append(value)
return my_list
print(append_to_list(1))
print(append_to_list(2))
print(append_to_list(3))
❓ Вопросы
1. Почему результат выглядит неожиданно?
2. Как исправить это поведение?
3. Когда стоит использовать изменяемые аргументы по умолчанию — если вообще стоит?
🔍 Разбор
✅ Ожидаемый вывод:
[1]
[1, 2]
[1, 2, 3]
🔧 Почему так происходит
- Аргументы по умолчанию вычисляются один раз — во время определения функции, а не при каждом вызове.
- Значение my_list=[] создаётся один раз и затем используется повторно при всех вызовах.
- Все вызовы append_to_list изменяют один и тот же список.
⚠️ Подвох
Это один из самых коварных багов в Python, особенно среди начинающих — кажется, что my_list должен быть новым на каждый вызов, но это не так.
🧠 Вывод
- Никогда не используй изменяемые типы (list, dict, set) как значения по умолчанию.
- Вместо этого используй None и создавай новый объект вручную:
def append_to_list(value, my_list=None):
if my_list is None:
my_list = []
my_list.append(value)
return my_list
✅ Тогда вывод будет:
[1]
[2]
[3]
📌 Это правило относится ко всем изменяемым типам: [], {}, set() и кастомные классы.
@Python_Community_ru
🛡 StarGuard — умный аудит GitHub-репозиториев прямо из консоли
Открытый проект — это мощный CLI-инструмент на Python, который автоматически анализирует open-source репозитории и помогает выявить:
🔸 фальшивые звёзды
🔸 всплески активности
🔸 опасные зависимости
🔸 лицензии с подвохом
🔸 подозрительный код и токсичных контрибьюторов
📊 Что делает StarGuard
✅ Обнаруживает аномалии звёзд
— Вычисляет резкие всплески популярности с помощью BurstDetector и медианного отклонения.
— Определяет подозрительных пользователей с «пустыми» профилями и новыми аккаунтами.
✅ Анализирует зависимости и SBOM
— Поддержка PyPI, npm, Maven, Go, Ruby
— Предупреждает об unpinned-пакетах и git-зависимостях
✅ Проверяет лицензии
— Выявляет несовместимости (например, AGPL внутри MIT)
— Предупреждает о скрытых ограничениях
✅ Оценивает контрибьюторов
— Проверяет концентрацию коммитов
— Определяет "одиночек", на которых держится проект
✅ Сканирует код на опасные паттерны
— Обнаруживает eval, скрытые майнеры, необфусцированные ключи
🚀 Как использовать
python -m starguard.cli owner/repo --format markdown --plot stars.png
🔹 Без GitHub-токена работает, но лимит — 60 запросов/час
🔹 С GITHUB_TOKEN — до 5000 запросов
🎯 Кому полезно
• DevOps-командам — для верификации OSS-зависимостей
• Безопасникам — для быстрой проверки на supply chain угрозы
• Инвесторам — чтобы не попасть на проекты с "накрученной" популярностью
• Open Source авторам — для прозрачности и Trust Badge
🔗 GitHub (https://github.com/m-ahmed-elbeskeri/Starguard)
💡 Инструмент, который показывает, что за красивыми графиками звёзд часто стоит маркетинг, а не код. Умей фильтровать — ставь охрану у репозитория.
@Python_Community_ru
Открытый проект — это мощный CLI-инструмент на Python, который автоматически анализирует open-source репозитории и помогает выявить:
🔸 фальшивые звёзды
🔸 всплески активности
🔸 опасные зависимости
🔸 лицензии с подвохом
🔸 подозрительный код и токсичных контрибьюторов
📊 Что делает StarGuard
✅ Обнаруживает аномалии звёзд
— Вычисляет резкие всплески популярности с помощью BurstDetector и медианного отклонения.
— Определяет подозрительных пользователей с «пустыми» профилями и новыми аккаунтами.
✅ Анализирует зависимости и SBOM
— Поддержка PyPI, npm, Maven, Go, Ruby
— Предупреждает об unpinned-пакетах и git-зависимостях
✅ Проверяет лицензии
— Выявляет несовместимости (например, AGPL внутри MIT)
— Предупреждает о скрытых ограничениях
✅ Оценивает контрибьюторов
— Проверяет концентрацию коммитов
— Определяет "одиночек", на которых держится проект
✅ Сканирует код на опасные паттерны
— Обнаруживает eval, скрытые майнеры, необфусцированные ключи
🚀 Как использовать
python -m starguard.cli owner/repo --format markdown --plot stars.png
🔹 Без GitHub-токена работает, но лимит — 60 запросов/час
🔹 С GITHUB_TOKEN — до 5000 запросов
🎯 Кому полезно
• DevOps-командам — для верификации OSS-зависимостей
• Безопасникам — для быстрой проверки на supply chain угрозы
• Инвесторам — чтобы не попасть на проекты с "накрученной" популярностью
• Open Source авторам — для прозрачности и Trust Badge
🔗 GitHub (https://github.com/m-ahmed-elbeskeri/Starguard)
💡 Инструмент, который показывает, что за красивыми графиками звёзд часто стоит маркетинг, а не код. Умей фильтровать — ставь охрану у репозитория.
@Python_Community_ru
🚀 DeerFlow — Open‑Source фреймворк для Deep Research от ByteDance
🌟 Что такое DeerFlow?
DeerFlow (Deep Exploration and Efficient Research Flow) — это модульный multi-agent фреймворк с открытым исходным кодом, созданный для автоматизации глубоких исследовательских процессов. Он сочетает работу с LLM, веб-поиск, краулинг и выполнение Python-кода :contentReference[oaicite:0]{index=0}.
🧱 Основные особенности
- Multi-agent архитектура
Координатор, Планировщик, Исследователь, Кодер, Репортер и даже голосовой модуль — каждый агент выполняет свою задачу в пайплайне исследования :contentReference[oaicite:1]{index=1}.
- Интеграция инструментов
Встроенный веб-поиск (Tavily, DuckDuckGo, Brave, arXiv), web scraping через Jina, Python REPL для исполнения кода, генерация отчетов и даже автоматизированные подкасты при помощи TTS :contentReference[oaicite:2]{index=2}.
- Human‑in‑the‑loop
Возможность ставить задачи и править планы вручную — обеспечивается контроль на каждом этапе :contentReference[oaicite:3]{index=3}.
- Генерация конечного контента
Полученные данные консолидируются в отчеты (Markdown, PPT), синтезируются в речь (подкасты), экспортируются — всё автономно.
⚙️ Github (https://github.com/bytedance/deer-flow)
@Python_Community_ru
🌟 Что такое DeerFlow?
DeerFlow (Deep Exploration and Efficient Research Flow) — это модульный multi-agent фреймворк с открытым исходным кодом, созданный для автоматизации глубоких исследовательских процессов. Он сочетает работу с LLM, веб-поиск, краулинг и выполнение Python-кода :contentReference[oaicite:0]{index=0}.
🧱 Основные особенности
- Multi-agent архитектура
Координатор, Планировщик, Исследователь, Кодер, Репортер и даже голосовой модуль — каждый агент выполняет свою задачу в пайплайне исследования :contentReference[oaicite:1]{index=1}.
- Интеграция инструментов
Встроенный веб-поиск (Tavily, DuckDuckGo, Brave, arXiv), web scraping через Jina, Python REPL для исполнения кода, генерация отчетов и даже автоматизированные подкасты при помощи TTS :contentReference[oaicite:2]{index=2}.
- Human‑in‑the‑loop
Возможность ставить задачи и править планы вручную — обеспечивается контроль на каждом этапе :contentReference[oaicite:3]{index=3}.
- Генерация конечного контента
Полученные данные консолидируются в отчеты (Markdown, PPT), синтезируются в речь (подкасты), экспортируются — всё автономно.
⚙️ Github (https://github.com/bytedance/deer-flow)
@Python_Community_ru
GitHub
GitHub - bytedance/deer-flow: DeerFlow is a community-driven Deep Research framework, combining language models with tools like…
DeerFlow is a community-driven Deep Research framework, combining language models with tools like web search, crawling, and Python execution, while contributing back to the open-source community. -...
🧪 Microsoft представляет Pyrona — экспериментальный проект для безопасной конкуренции в Python!
🔧 Разработан в рамках Project Verona, Pyrona исследует, как принципы владения и управления памятью (в духе Rust) можно адаптировать для динамического языка, такого как Python.
🌀 Что такое Pyrona?
• Прототип модифицированного Python без GIL (Global Interpreter Lock)
• Использует идеи из Verona и FrankenScript — toy-языка с проверками владения и безопасности
• Вводит динамическое региональное владение и глубокую неизменяемость объектов
🚀 Зачем это нужно?
С приближением PEP 703 (Python без GIL) возникает угроза гонок данных. Pyrona предлагает решение:
✅ Безопасная многопоточность
✅ Динамические гарантии корректности
✅ Поддержка привычной экосистемы Python
🔍 Детали:
• Поддерживает эксперименты с субинтерпретаторами (PEP 684)
• Публикация на PLDI 2025: *Dynamic Region Ownership for Concurrency Safety*
• Активное участие Гвидо ван Россума и команды Faster CPython
🧠 Pyrona — это не продакшен-язык, а платформа для будущего безопасного и многопоточного Python.
🔗 Подробнее (https://microsoft.github.io/verona/pyrona.html)
🔗 Github (https://github.com/microsoft/verona/)
@Python_Community_ru
🔧 Разработан в рамках Project Verona, Pyrona исследует, как принципы владения и управления памятью (в духе Rust) можно адаптировать для динамического языка, такого как Python.
🌀 Что такое Pyrona?
• Прототип модифицированного Python без GIL (Global Interpreter Lock)
• Использует идеи из Verona и FrankenScript — toy-языка с проверками владения и безопасности
• Вводит динамическое региональное владение и глубокую неизменяемость объектов
🚀 Зачем это нужно?
С приближением PEP 703 (Python без GIL) возникает угроза гонок данных. Pyrona предлагает решение:
✅ Безопасная многопоточность
✅ Динамические гарантии корректности
✅ Поддержка привычной экосистемы Python
🔍 Детали:
• Поддерживает эксперименты с субинтерпретаторами (PEP 684)
• Публикация на PLDI 2025: *Dynamic Region Ownership for Concurrency Safety*
• Активное участие Гвидо ван Россума и команды Faster CPython
🧠 Pyrona — это не продакшен-язык, а платформа для будущего безопасного и многопоточного Python.
🔗 Подробнее (https://microsoft.github.io/verona/pyrona.html)
🔗 Github (https://github.com/microsoft/verona/)
@Python_Community_ru
🖥 Топ Python-библиотек для работы с PDF
Работаешь с PDF в Python? Вот подборка лучших библиотек, которые помогут извлекать текст, редактировать, создавать и анализировать PDF-документы. Каждая из них имеет свои сильные стороны 👇
📌 PyPDF2 — для чтения, разделения, объединения, поворота и модификации PDF
🔗 https://github.com/py-pdf/pypdf
⛏ PDFMiner — извлекает текст, структуру и метаинформацию из PDF (в том числе со шрифтами и координатами)
🔗 https://github.com/pdfminer/pdfminer.six
📊 ReportLab — создание PDF-файлов с графиками, таблицами, стилями и вёрсткой
🔗 https://www.reportlab.com/opensource/
🌐 PyPDFium2 — быстрый рендеринг и извлечение изображений с помощью движка PDFium
🔗 https://pypi.org/project/pypdfium2/
🛠 pdfplumber — удобное извлечение текста, таблиц и координат объектов
🔗 https://github.com/jsvine/pdfplumber
📄 PyMuPDF (fitz) — быстрая и мощная библиотека для анализа, рендеринга и аннотирования PDF
🔗 https://github.com/pymupdf/PyMuPDF
🔜 Примеры по работе с библиотеками (https://uproger.com/luchshie-python-bibliotek-dlya-raboty-s-pdf/)
Используй их вместе или по отдельности — в зависимости от того, нужно ли тебе распарсить текст, извлечь таблицу, отрендерить страницу или сгенерировать отчёт.
#Python #PDF #PyPDF2 #PDFMiner #ReportLab #pdfplumber #PyMuPDF #PyPDFium2 #DevTools #PythonDev #OpenSource
@Python_Community_ru
Работаешь с PDF в Python? Вот подборка лучших библиотек, которые помогут извлекать текст, редактировать, создавать и анализировать PDF-документы. Каждая из них имеет свои сильные стороны 👇
📌 PyPDF2 — для чтения, разделения, объединения, поворота и модификации PDF
🔗 https://github.com/py-pdf/pypdf
⛏ PDFMiner — извлекает текст, структуру и метаинформацию из PDF (в том числе со шрифтами и координатами)
🔗 https://github.com/pdfminer/pdfminer.six
📊 ReportLab — создание PDF-файлов с графиками, таблицами, стилями и вёрсткой
🔗 https://www.reportlab.com/opensource/
🌐 PyPDFium2 — быстрый рендеринг и извлечение изображений с помощью движка PDFium
🔗 https://pypi.org/project/pypdfium2/
🛠 pdfplumber — удобное извлечение текста, таблиц и координат объектов
🔗 https://github.com/jsvine/pdfplumber
📄 PyMuPDF (fitz) — быстрая и мощная библиотека для анализа, рендеринга и аннотирования PDF
🔗 https://github.com/pymupdf/PyMuPDF
🔜 Примеры по работе с библиотеками (https://uproger.com/luchshie-python-bibliotek-dlya-raboty-s-pdf/)
Используй их вместе или по отдельности — в зависимости от того, нужно ли тебе распарсить текст, извлечь таблицу, отрендерить страницу или сгенерировать отчёт.
#Python #PDF #PyPDF2 #PDFMiner #ReportLab #pdfplumber #PyMuPDF #PyPDFium2 #DevTools #PythonDev #OpenSource
@Python_Community_ru
🖥 Хитрая задача на Python для продвинутых: словарь, который работает как список
Представь структуру данных, которая:
• работает как dict — доступ по ключу
• работает как list — доступ по индексу
• сохраняет порядок вставки
• поддерживает .index(key) и .key_at(i)
📌 Задача: Реализуй класс IndexedDict, который делает всё это.
🔍 Пример использования:
d = IndexedDict()
d["a"] = 10
d["b"] = 20
d["c"] = 30
print(d["a"]) # 10
print(d[0]) # 10
print(d[1]) # 20
print(d.key_at(1)) # "b"
print(d.index("c")) # 2
for k in d:
print(k, d[k]) # перебор по ключам
⚠️ Подвох:
• Просто наследовать dict не получится — d[0] будет интерпретироваться как ключ, а не индекс
• Придётся реализовать двойную логику доступа вручную
• Нужно корректно поддержать __iter__, __getitem__, __len__ и др.
✅ Решение:
```python
from collections.abc (collections.abc) import MutableMapping
class IndexedDict(MutableMapping):
def __init__(self):
self._data = {}
self._keys = []
def __getitem__(self, key):
if isinstance(key, int):
real_key = self._keys[key]
return self._data[real_key]
return self._data[key]
def __setitem__(self, key, value):
if key not in self._data:
self._keys.append(key)
self._data[key] = value
def __delitem__(self, key):
if key in self._data:
self._keys.remove(key)
del self._data[key]
def __iter__(self):
return iter(self._keys)
def __len__(self):
return len(self._data)
def index(self, key):
return self._keys.index(key)
def key_at(self, idx):
return self._keys[idx]
```
📈 Зачем это нужно:
• Отличная тренировка на переопределение магических методов
• Часто встречается в фреймворках (Pandas, SQLAlchemy)
• Тестирует знание ABC-классов (`collections.abc.MutableMapping`)
• Полезно для построения кастомных структур данных
Хочешь версию с `__contains__`, `__reversed__`, типизацией и сериализацией — пиши 💬
@Python_Community_ru
Представь структуру данных, которая:
• работает как dict — доступ по ключу
• работает как list — доступ по индексу
• сохраняет порядок вставки
• поддерживает .index(key) и .key_at(i)
📌 Задача: Реализуй класс IndexedDict, который делает всё это.
🔍 Пример использования:
d = IndexedDict()
d["a"] = 10
d["b"] = 20
d["c"] = 30
print(d["a"]) # 10
print(d[0]) # 10
print(d[1]) # 20
print(d.key_at(1)) # "b"
print(d.index("c")) # 2
for k in d:
print(k, d[k]) # перебор по ключам
⚠️ Подвох:
• Просто наследовать dict не получится — d[0] будет интерпретироваться как ключ, а не индекс
• Придётся реализовать двойную логику доступа вручную
• Нужно корректно поддержать __iter__, __getitem__, __len__ и др.
✅ Решение:
```python
from collections.abc (collections.abc) import MutableMapping
class IndexedDict(MutableMapping):
def __init__(self):
self._data = {}
self._keys = []
def __getitem__(self, key):
if isinstance(key, int):
real_key = self._keys[key]
return self._data[real_key]
return self._data[key]
def __setitem__(self, key, value):
if key not in self._data:
self._keys.append(key)
self._data[key] = value
def __delitem__(self, key):
if key in self._data:
self._keys.remove(key)
del self._data[key]
def __iter__(self):
return iter(self._keys)
def __len__(self):
return len(self._data)
def index(self, key):
return self._keys.index(key)
def key_at(self, idx):
return self._keys[idx]
```
📈 Зачем это нужно:
• Отличная тренировка на переопределение магических методов
• Часто встречается в фреймворках (Pandas, SQLAlchemy)
• Тестирует знание ABC-классов (`collections.abc.MutableMapping`)
• Полезно для построения кастомных структур данных
Хочешь версию с `__contains__`, `__reversed__`, типизацией и сериализацией — пиши 💬
@Python_Community_ru
Руководство_по_ускорению_и_оптимизации_Python_кода_pdf.pdf
264.6 KB
🖥 Гайд по ускорению Python, который реально стоит прочитать 🔥
Без лишней теории — только рабочие практики, которые используют разработчики в боевых проектах.
Внутри:
• Как искать bottleneck'и и профилировать код
• Где и когда использовать Numba, Cython, PyPy
• Ускорение Pandas, NumPy, переход на Polars
• Асинхронность, кеши, JIT, сборка, автопрофилировка — всё по полочкам
• Только нужные инструменты: scalene, py-spy, uvloop, Poetry, Nuitka
⚙️ Написано просто, чётко и с прицелом на production.
📌 Полная версия онлайн (https://uproger.com/optimizciyaiuskoreniecodanapython/)
@Python_Community_ru
Без лишней теории — только рабочие практики, которые используют разработчики в боевых проектах.
Внутри:
• Как искать bottleneck'и и профилировать код
• Где и когда использовать Numba, Cython, PyPy
• Ускорение Pandas, NumPy, переход на Polars
• Асинхронность, кеши, JIT, сборка, автопрофилировка — всё по полочкам
• Только нужные инструменты: scalene, py-spy, uvloop, Poetry, Nuitka
⚙️ Написано просто, чётко и с прицелом на production.
📌 Полная версия онлайн (https://uproger.com/optimizciyaiuskoreniecodanapython/)
@Python_Community_ru
🎙️ Voice Extractor — мощный open-source инструмент для извлечения и разметки голоса из многофайлового аудио
Если у тебя есть подкасты, интервью или многоголосые записи — этот инструмент выделит каждого говорящего и превратит всё в чистые датасеты для TTS или анализа.
🔧 Что умеет:
• Диаризация: разделение голосов с помощью Pyannote
• Удаление перекрытий: исключает участки с одновременной речью
• Транскрипция: генерирует текст аудио
• Изоляция голоса: можно вырезать только одного говорящего
• Многоязычность: работает не только с английским
🎯 Зачем использовать:
• Создание кастомных TTS-моделей
• Анализ подкастов, лекций и интервью
• Построение голосовых ассистентов
🚀 Как запустить:
git clone https://github.com/ReisCook/Voice_Extractor.git
cd Voice_Extractor
pip install -r requirements.txt
python extract_voice.py --file_path your_audio_file.mp3
📎 GitHub: https://github.com/ReisCook/Voice_Extractor
@Python_Community_ru
Если у тебя есть подкасты, интервью или многоголосые записи — этот инструмент выделит каждого говорящего и превратит всё в чистые датасеты для TTS или анализа.
🔧 Что умеет:
• Диаризация: разделение голосов с помощью Pyannote
• Удаление перекрытий: исключает участки с одновременной речью
• Транскрипция: генерирует текст аудио
• Изоляция голоса: можно вырезать только одного говорящего
• Многоязычность: работает не только с английским
🎯 Зачем использовать:
• Создание кастомных TTS-моделей
• Анализ подкастов, лекций и интервью
• Построение голосовых ассистентов
🚀 Как запустить:
git clone https://github.com/ReisCook/Voice_Extractor.git
cd Voice_Extractor
pip install -r requirements.txt
python extract_voice.py --file_path your_audio_file.mp3
📎 GitHub: https://github.com/ReisCook/Voice_Extractor
@Python_Community_ru